package client.role;

import client.common.result.Result;
import client.common.vo.RoleVO;
import client.common.vo.UserVO;
import client.role.button.ButtonEditor;
import client.role.button.ButtonRenderer;
import remote.service.RoleService;
import remote.service.UserService;

import javax.swing.*;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
import java.awt.*;
import java.util.List;

public class UserList extends JFrame {
    private JPanel panel;
    private JPanel tablePanel; // 新增的表格面板
    private JButton backButton;
    private RoleService roleService;
    private RoleList roleList;
    private List<RoleVO> roleListFromServer;
    private Integer currentRoleId; // 保存当前角色ID
    
    public UserList(Integer roleId, RoleList roleList) {
        // 保存当前角色ID
        this.currentRoleId = roleId;
        
        // 设置与 RoleListUI 一样的 Nimbus 风格
        try {
            for (UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (Exception e) {
            System.out.println("Nimbus style is not available, using default style.");
        }
        
        this.roleList = roleList; // 保存角色列表界面的引用（如果需要的话）
        roleService = new RoleService() {
        }; // 使用默认的 RoleService 实现
        
        setTitle("各角色的用户列表");
        setSize(800, 600); // 设置窗口大小为800*600
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setLocationRelativeTo(null); // 窗口置于屏幕中心
        
        panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); // 使用垂直布局
        
        // 添加表格部分的 panel
        tablePanel = new JPanel();
        tablePanel.setLayout(new BorderLayout());
        panel.add(tablePanel);
        
        // 加载角色列表和用户列表
        loadRoles();
        loadUsers(roleId);
        
        JScrollPane scrollPane = new JScrollPane(panel); // 使面板可滚动
        add(scrollPane);
        setVisible(true);
    }
    
    // 测试方法
    public static void main(String[] args) {
        // 假设 RoleListUI 是已经存在的，这里可以传递一个空值测试
        new UserList(1, null);
    }
    
    public void freshTable() {
        // 刷新表格时只更新表格面板内容
        tablePanel.removeAll(); // 清除现有表格内容
        loadUsers(currentRoleId); // 重新加载表格
        tablePanel.revalidate(); // 重新布局
        tablePanel.repaint(); // 重绘表格
    }
    
    private void loadUsers(Integer roleId) {
        // 根据角色ID从后端获取用户列表
        Result<List<UserVO>> userResult = roleService.getUserListByRoleId(roleId);
        if (userResult.getCode() == 200) { // 判断请求是否成功
            List<UserVO> userList = userResult.getData();
            
            // 定义表格列名
            String[] columnNames = {"用户名", "电话号码", "操作"};
            // 准备表格数据
            String[][] rowData = new String[userList.size()][3];
            for (int i = 0; i < userList.size(); i++) {
                UserVO user = userList.get(i);
                rowData[i][0] = user.getRealName(); // 用户名
                rowData[i][1] = user.getPhoneNumber(); // 电话号码
            }
            
            // 创建表格
            JTable userTable = new JTable(rowData, columnNames) {
                // 使第三列的按钮可点击
                public boolean isCellEditable(int row, int column) {
                    return column == 2; // 只让第三列可以编辑
                }
                
                // 重写getCellRenderer以显示按钮
                public TableCellRenderer getCellRenderer(int row, int column) {
                    if (column == 2) {
                        return new ButtonRenderer();
                    } else {
                        return super.getCellRenderer(row, column);
                    }
                }
            };
            
            // 设置按钮事件处理
            UserService userService = new UserService() {
                @Override
                public Result<String> updateUserRole(Long userId, Integer roleId) {
                    return UserService.super.updateUserRole(userId, roleId);
                }
            };
            userTable.getColumn("操作").setCellEditor(new ButtonEditor(new JCheckBox(), userList, roleListFromServer, userService, this));
            
            // 调整表格内容字体大小
            userTable.setFont(new Font("Serif", Font.PLAIN, 18)); // 设置表格内容字体为18号
            userTable.setRowHeight(30); // 设置行高
            
            // 调整表头字体大小
            JTableHeader header = userTable.getTableHeader();
            header.setFont(new Font("Serif", Font.BOLD, 20)); // 设置表头字体为20号
            
            JScrollPane tableScrollPane = new JScrollPane(userTable);
            tableScrollPane.setPreferredSize(new Dimension(780, 500)); // 设置表格的首选大小
            
            tablePanel.add(tableScrollPane, BorderLayout.CENTER); // 将表格添加到表格面板的中间部分
        } else {
            JOptionPane.showMessageDialog(this, "获取用户列表失败: " + userResult.getMessage());
        }
    }
    
    private void loadRoles() {
        // 从后端获取所有角色列表
        Result<List<RoleVO>> roleResult = roleService.getRoleList();
        if (roleResult.getCode() == 200) {
            roleListFromServer = roleResult.getData();
        } else {
            JOptionPane.showMessageDialog(this, "获取角色列表失败: " + roleResult.getMessage());
        }
    }
}
